home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d12
/
bossa.arc
/
BOSS_SUP.ARC
/
REV.HST
< prev
next >
Wrap
Text File
|
1990-03-12
|
26KB
|
571 lines
/*
** WINDOWS - Simple but Elegant Window Functions
** (Datalight, Lattice, CI86, Microsoft, Borland
** Zortech, Mix PowerC, Manx AZTEC C, WATCOM)
**
** Copyright (c) 1984 - 1990 - Philip A. Mongelluzzo
** All rights reserved.
**
** Revision History in reverse order:
**
** The following changes were incorporated in the 02.15.90 release:
**
** 01.10.90 - WCVLIB.ASM created. This file contains the assembly
** language routines for WATCOM 7.0. Previous versions of
** WATCOM should use MSVLIB.ASM.
**
** 01.05.89 - Physical windows wider than 80 columns were not
** working correctly. Thanks to all who reported this
** problem. (wn_actic.c, wn_sup.c, windows.c, wn_init.c).
** The constant "4096" was not removed in wn_savres. It
** does not impact the physical sceen size logic but does
** allow the code of those who have "tinkered" with video
** pages to continue to work.
**
** 12.22.89 - Re-assembled all assembly language routines to insure
** that wni_mxcols, wni_mxrows, and wni_mxneed were being
** used correctly.
**
** 11.30.89 - ZORTECH 2.0 Support. Please note that ZORLIB version
** 2.0 can not create a usable LWIN.LIB. Microsoft's LIB
** works fine and should be used. ZORTECH has been notified
** of the problem.
**
** 11.24.89 - jeesh... One line exploding windows exploded again!
** This time we got the gremlin!! Tnx to Michael Canfield
** for suppling the test case.
**
** (11.15.89) **
**
** 10.28.89 - Modified wn_title to insure ALL compiliers process
** hex values that are imbedded into the title properly.
** (e.g. "Hello \xcd There!")
** Thanks to Don Wahl for pointing out the discrepancy.
**
** 10.25.89 - It would appear that the PC/PC_CLONE BIOS can not deal
** with scrolling single line windows. wn_insrow() was taught
** to erase single line windows and avoid using the
** BIOS for this special case. This problem does not exist
** on AT or PC/2 class machines. Thanks to Harold Jackson
** for reporting the problem.
**
** 10.24.89 - Eliminated a potential multiple cursor problem with
** the mouse cursor when a window is being saved/restored
** with an active mouse. Tip of the hat to Steve Thatcher
** of Attachmate.
**
** 10.20.89 - Corrected a bug in wn_open to allow 1 line exploding
** windows to function properly. Thanks to John F. La Fleur
** for reporting the problem.
**
** wn_puts was not handling borderless windows properly.
** Thanks to Tim Keane for reporting the problem.
**
** Lattice Version 6.0 Support
**
** 09.27.89 - Logic was added to wn_input to insure that user supplied
** non null editing buffers are the same lenth as their masks!
** This logic will prevent garbage from appearing when
** wn_input is called to peform data entry with a prefilled
** value in the user buffer (ubuff).
**
** 09.05.89 - The forms package now treats the ESCcape
** like most common applications do. That is to say that it
** causes the current operation to cease. Current
** Window BOSS users please note that this feature can
** be disabled by removing the code in wn_frmget that contains
** "ESC.001" as part of the comments.
**
** 09.05.89 - Added 1st character sensitivity to the sample popup menu
** code. ** NOTE ** -> For menu's that have different 1st
** character picks.
**
** (08.25.89) **
**
** 08.23.89 - Exploding window opens were failing on SOME
** adapters. Even size exploding windows were
** failing. Corrected!
** Thanks to Richard Allen for his assistance.
**
** The following changes were incorporated in the 07.01.89 release:
**
** 06.17.89 - Lattice 3.41!! ... The version release race is on!
**
** 05.29.89 - Mix Power C 1.30 Support.
**
** 05.25.89 - Added wn_gutext and wn_gltext. Get upper case only
** and lower case only text functions. Thanks to
** Charlie Munao for the suggestion. Improved code 6/6/89.
**
** 05.23.89 - wn_frmcls now sets the form pointer to the form being
** closed to NFRM and the individual field pointers to
** NFLD. This should help those who attempt to dectect
** if a form/field is active.
**
** 05.10.89 - wn_close now sets the window pointer to the window
** being closed to WNLPTR. This should help those who
** attempt to detect if a window is open.
**
** - Moved definition of FAR MEMORY marcos from "wn_sup.c"
** and "wn_activ.c" to "windows.h".
**
** 05.06.89 - By popular request... WN_FRMGET now displays both the
** field prompt and data entry mask for all fields prior
** to accepting input for the 1st field. Accomplished by
** introducing "wni_frmflg" which is used/tested by
** all the data entry functions, wn_input, and wn_frmget.
**
** 05.05.89 - Exploding window logic was tweeked to provide smoother
** explosions.
**
** 05.04.89 - Incorporated support for user defined PHYSICAL screen
** size. New globals: wni_mxrows, wni_mxcols, wni_mxneed.
** Globals are defined in "windows.c" and are referenced in
** "windows.h". The globals are max rows, max cols, and max
** memory required to save a *complete* screen image (rows *
** col * 2). A new version of wn_init, wn_psinit has be
** provided to properly set the globals. Refer to the manual
** for a complete discussion. The defaults are 25, 80, and
** 4000. Usefull for applications and/or systems that run
** in 43 line EGA or 50 line VGA mode. Since The BOSS
** assumes the screen size to be fixed, wn_psinit must be
** called before ANY windows are opened.
**
** 04.30.89 - v_kstat now returns TRUE rather than (-1). This conforms
** to the constant in "windows.h". Thanks to Clive Basson
** at Infostat!
**
** - wns_dput (internal routine) was modified to call
** wns_savres for all writes. This will improve
** normal screen output (speed) in most cases.
**
** - wns_drow (internal routine) now calls wns_savres
** for all writes. This will improve normal screen
** output (speed) in most cases.
**
** - wn_title now calls wn_dput to write title for
** faster title writes.
**
** 04.15.89 - wn_gulong corrected to use common "%lu" .vs. "%U"
**
** 04.05.89 - Watcom 7.0 Support. Tip of the hat to the folks at
** the Watcom Compiler factory... Once again, they proved
** that you can release a MAJOR upgrade without breaking
** anybody's hard work (code).
**
** 04.04.89 - Lattice 3.4X support. (LC3) Tip of the hat to
** William Hinkle & Jon Martin (UNISYS) for thier comments,
** suggestions and support.
**
** - Float/Double promotion & demotion caused wn_gfloat
** trouble. Resolved with #if LC3 in wn_gfloat. (LC3)
**
** - windows.h was modified to eliminate warnings
** about undefined control blocks and include
** stdlib.h for proper memory allocation
** prototypes. (LC3)
**
** - Fixed LCP.BAT, APMODEL.BAT, and ADMODE.BAT (LC3)
**
** - Eliminated *true* unreferenced variables. (LC3)
**
** 03.11.89 - Quick C Version 2.0 support.
**
** 03.10.89 - wn_frmopn/cls was tweeked to be a bit smarter about
** memory allocation & deallocation. Tip of the hat
** to Barry Roomberg & Peter Spreadborough. This
** solves the *very* random "NULL POINTER" message
** on exit.
**
** The following changes were incorporated in the 02.01.89 release:
**
** 02.01.89 - Mouse support, get double, get unsigned long,
** get password, left justify string, right justify string
** center string, delete leading and/or trailing blanks.
** Files: wn_mouse.c, wn_string.c, wn_gpword.c
** Files: wn_gdouble.c, wn_gulong.c
**
** 12.26.88 - wn_restore was modified to allow for those who like to
** diddle with a "wn_save"d screen image. This also
** corrected a potential problem with restoring saved
** images. Thanks to Mike Blaszczak for reporting the
** conflict.
**
** 08.01.88 - added #if __TURBOC__ to windows.c
**
** The following changes were incorporated in the 08.15.88 release:
**
** 07.24.88 - wn_puts() was not fixing up color attributes on mono
** systems - corrected.
**
** 07.10.88 - AZTEC "C" support. Thanks to Dexter McCloud for his
** assistance.
**
** - help() has been modified to be compatiable with
** AZTEC. Please take note as format of the ".hlp" file
** has changed. Refer to Intelc.hlp for examples.
**
** 07.03.88 - WATCOM "C" support.
**
** - smartened up wn_frmopn() & wn_frmcls() to avoid
** possible NULL Pointer Assignments.
**
** - cleaned up pointer conversion warnings in wn_activate,
** wn_close, wn_open, wn_restore, wn_save. defined
** WNLPTR in windows.h.
**
** - eliminated various warning messages during compilation,
** Lattice still complains for no valid reason on a few
** modules.
**
** - wns_alloc now use runtime routines allocating memory
** in the large model, dos routines in small code models.
**
** - wns_alloc allocates and immediately frees all available
** memory in the small data memory models before allocating far
** memory. This eliminates memory mgmt clashes for some
** compilers.
**
** - eliminated the need for "peek.c"
**
** 06.29.88 - Corrected wn_activate to always fixup the cursor
** display for the activated window. Thanks to
** John P. Toscano for reporting the problem.
**
** 06.12.88 - Functions in wn_activate & wn_sup that call _vidblt
** and xferdata were taught how to deal with variable
** offsets from wns_alloc.
**
** The following changes were incorporated in the 06.01.88 release:
**
** 06.01.88 - Incoporated data entry routines!
**
** Smartened up wn_puts on border detection.
**
** 05.14.88 - Added: wn_putc (window put character)
** wn_putca (window put character & attribute)
** Both can be found in the WN_PUTS.C file.
**
** 05.10.88 - wn_dmode was now properly sets PAINT & FLASH modes for
** EGA video adapters - Thanks to Mike Gross from
** West Germany
**
** The following changes were incorporated in the 05.06.88 release:
**
** 05.06.88 - Support for MIX Power C added. - Tip of the hat to
** Bob Lewis for his assistance.
**
** 04.27.88 - The declaration of _stklen was removed from BOSSDEMO.C,
** this will keep Turbo C happy.
**
** 03.22.88 - wn_activate ability to detect window overlap and
** handle borderless windows was improved.
**
** 03.22.88 - popup was taught how to handle text on the 0th line.
**
** 03.19.88 - v_spage was loading BH instead of AL. Thanks to
** Ross Schaach (TRAX, Corp.)
**
** 02.10.88 - wn_gets was modified to insure that charcters being
** echoed stay within the window borders. Thanks to
** Dave McCracken for the suggestion.
**
** 01.14.88 - static declarations of filbuf and showpage were removed
** in help.c
**
** The following changes were incorporated in the 11.20.87 release:
**
** 11.13.87 - Microsoft Ver 5.0 & Quick C Support
**
** 09.21.87 - wn_activate was occasionally incorrectly determining
** window overlap. Thanks to the folks at Datalight
** and Marden Marshall for reporting the problem and supplying
** test cases.
**
** 09.17.87 - wn_init() and wn_exit() were modified to work around
** Turbo C's inability to handing allocating far memory
** in the large model.
**
** 09.07.87 - wns_push(), wns_pop(), wn_activate(), wn_move(),
** wns_image(), and wns_blt() were modified to use a table
** of global segments, offsets, and pointers.
** This was done to support the wn_init() and wn_exit()
** functions.
**
** wn_init() and wn_exit() added. wn_init() must be the
** first window fucntion called and it must only be called
** once. It works in conjucntion with wn_exit() to insure
** that the screen image on application entry is restored
** to the "T" on application exit. wn_exit() must be the
** last window function called. One can not be used without
** the other. Both should be used but are neither are
** required.
**
** 09.05.87 - wn_delrow was calling v_locate with args reversed
** causing the wrong section of the screen to be cleared
** on single line borderless windows. Thanks to Paul
** Stephenson of Rockwell International for reporting both
** the problem and the cure.
**
** 09.03.87 - All assembler routines in DLVLIB.ASM now save/restore
** the SI & DI registers. Datalight 3.10 and later
** specific. The -w and -p command line parameters must
** be used when compiling The Window BOSS source code
** under Datalight 3.10 and later.
**
** The following changes were incorporated in the 08.22.87 release:
**
** 08.10.87 - Added wns_dmode() to set the display mode.
** wns_dmode(PAINT) sets the window display mode to paint
** style, wn_dmode(FLASH) sets the display mode to
** flash style. This function eliminates the need to set
** wn_sbit and wns_mtflg to produce the desired effects.
**
** 07.17.87 - wn_puts() & wn_putsa() perform simple range checking to
** insure that the string being displayed is/stays within
** the target window.
**
** 06.22.87 - Let's "C" specific code removed. Support will continue
** for previous versions but Mark William's products will
** not be supported in this or future releases. This
** action is being as the result of compiler limitations.
**
** 06.17.87 - wn_activate now does INSTANT screen updates. Ditto
** for wn_move. wn_mtype() returns 1 for EGA.
** BLAZING screen updates on EGAs.
**
** 06.07.87 - wns_wtext() was incorrectely computing the offset for
** windows with wn_wrap enabled!
**
** The following changes were incorporated in the 06.04.87 release:
**
** 06.03.87 - Support for BORLAND Turbo C!!
**
** The following changes were incorporated in the 05.12.87 release:
**
** 05.12.87 - wns_text was incorrectly compensating for single line
** borderless windows (Attachmate follow up).
**
** 05.04.87 - EXPLODING windows are now supported!! Simply add 800 to
** the video page when calling wn_open()!
**
** - Calls of the form wn_insrow(wn,0) and wn_delrow(wn,0)
** caused the border to be klobbered. wn_insrow() and
** wn_delrow() were taught about borders.
**
** 03.31.87 - wn_printf [wns_wtext()] was incorrectly displaying graphics
** characters. Thanks to Mark MacGee for reporting the problem.
**
** 03.23.87 - Attachmate reported that wn_gets was doing funny things
** on single line bordered windows on PCs and PC clones but
** was fine on ATs and AT clones! It would appear that the
** PC/PC_CLONE BIOS can not deal with scrolling single line
** windows. wn_delrow() was taught to erase single line
** windows and avoid using the BIOS for this special case.
**
** 03.19.87 - Argh!! Datalight elected to use M_I86 as a predefined
** equate. References to M_I86 were changed to
** MSCV3 | MSCV4. (Datalight 3.XX)
**
** The following changes were incorporated in the 03.15.87 release:
**
** 03.01.87 - wn_activate was incorrectly computing the coordinates of
** unbordered windows. Thanks to Peter Fletcher for reporting
** the problem and supplying a solution.
**
** 01.22.87 - wn_dborder() was using the wrong attribute (wn-style,
** instead of wn->bstyle). Thanks to Peter Partch for
** reporting the problem and supplying a solution.
**
** 01.06.87 - wn_activate was not walking through the current linked
** list of windows. In rare cases this would cause two
** windows to be considered non-overlapping when in fact
** they were. Thanks to Robert Klotz for reporting the
** problem.
**
** The following changes were incorporated in the 01.01.87 release:
**
** 12.19.86 - Removed a needless call to wn_err(wn,"wn_printf") in
** wn_title().
**
** 12.16.86 - Improved centering logic for window titles.
** Thanks to Steve Liberty for suggesting the change.
**
** 12.14.86 - Incorporated compiler specific equates in windows.h.
**
** 12.13.86 - wns_mtype() returns 0 for mode 3, 2 for mode 0 or 2,
** and 7 for mode 7. (Internal Use - This change allowed
** for the prevention of blue on black characters when
** the video mode is 2 and a color monitor is in use.
** (wns_fixc & wns_mtype).
**
** - BASIC support for Mark Williams "Lets C".
**
** - Tightend free() checks in wn_activate, wn_close, and
** wn_restore.
**
** 12.12.86 - wn_puts() was not adding the original physical cursor
** location to the logical cursor location.
** Thanks to Marek Glowacki for reporting the problem.
**
** 12.10.86 - Allow v_locate() to position the cursor slightly off
** the screen. Previous limit was (24,79) current limit
** is (25,80) which is just beyond the edge of the screen.
** This was done to insure that hidden cursors remain out
** of view.
**
** - Improved cursor handling when wn_dmaflg = FALSE.
**
** 12.09.86 - Taught wn_activate to honor cursor position of window
** being activated. This will insure the cursor is always
** in the right logical and physical position.
** More cosmetic enhancement than logic error correction.
**
** The following changes were incorporated in the 12.01.86 release:
**
** 11.28.86 - Reverse video attribute was not being set correctly
** on MGAs - corrected.
**
** 11.19.86 - wn_dborder was incorrectly computing the row offset.
** Thanks to Steve Thatcher for reporting the problem.
**
** 11.16.86 - Added ".smeth" member to window control block. This
** member defines the scrolling method to be used in
** the window. It can be set to BIOS or DMAS, the default
** is DMAS.
**
** - All routines that reference wn_activate will return
** NULL if the window could not be activated. This is
** usually due to a lack of free memory.
**
** The following changes were incorporated in the 11.14.86 release:
**
** 11.13.86 - Closing windows in random order when exiting "sometimes"
** produced null pointer assignment error messages or
** incorrect screen images - corrected.
**
** - wn_natrib() was not storing the newly defined window
** attribute in the window control block - corrected.
**
** 11.09.86 - Support for Datalight C added.
**
** 11.02.86 - v_border() added. Allows color of border area to be
** set on CGAs with color monitors.
**
** 11.01.86 - wn_fixcsr was not adding the original physical cursor
** location to the logical cursor location.
** Thanks to Bill Harts for reporting the problem.
**
** - wn_puts was computing the virtual cursor location
** incorrectly. Thanks to Eric Lundstrom!
**
** - Logic to dectect null strings was incorporated into
** _vidblt. This will prevent 64k worth of trash from
** being blitted to the video ram.
**
** 10.30.86 - All references to MSC in "windows.h" were changed
** to M_I86. This forces "windows.fns" to be included
** under Microsoft C. This change was also applied to
** "windows.c".
**
** 10.26.86 - Full float, long, etc. support for wn_printf in
** all Lattice versions. Microsoft 3.XX is the only
** one in the dark ages.
**
** 10.23.86 - Tip of the hat to Russ Thackson for the improved
** overlaping window detection technique incorporated
** in wn_activate().
**
** The following changes were incorporated in the 10.22.86 release:
**
** 10.22.86 - wn_activate() was causing unnecessary window
** thrashing on non-overlapping windows. Corrected.
**
** The following changes were incorporated in the 10.10.86 release:
**
** 09.27.86 - Tiled windows are now supported! wn_activate() added.
**
** - wn_gets() was not calling wns_err - corrected. This
** was not a bug, just continued support for wild pointer
** checks.
**
** 09.25.86 - New logic for vidblt(). Fast mode now works on color
** without causing snow or flicker!! Video updates now
** occur at the fastest possible speed! The effect of
** wn_sbit now conforms exactly to the description in the
** manual.
**
** - wn_printf (CI86) now has full float support. Thanks
** to Rob Sullivan for reporting the CI86 problem. Lattice
** and MSC Version 3.0 are the only hold outs for full
** wn_print support. MSC Version 3.0 support will never
** be incorporated. If you are using MSC Version 3.00
** you will have to upgrade to Version 4.XX. The price
** of the update is well worth it. Version 4.00 is a
** work of art! Lattice support will be delayed until
** Lattice gets around to supporting vsprintf() as
** defined by the evolving ANSI standard.
**
** 09.17.86 - seperate modules to decrease memory overhead.
**
** - link list support (wn_open,wn_close,WINDOWPTR struct)
** This is the ground work for tiled window support.
**
** 09.02.86 - use registers in wns_savres() for speed (MSC).
**
** The following changes were incorporated in the 08.30.86 release:
**
** 08.28.86 - wn_gets was delclared as (char *) but returning
** (void). Corrected to return (char *).
**
** 08.27.86 - wns_wtext() was not correctly handling borderless
** windows. Corrected.
**
** - wn_printf() was not correctly handing cases such as:
** wn_printf(wn,"%s %d %f %d\n", "text", 2, 2.2, 5);
** The window boss now supports a complete implementation
** of printf formatting under Microsoft C Version 4.00.
** All other compilers and versions support an INTEGER only
** wn_printf. This will be corrected in a future release.
**
** 08.16.86 - Added wn_gets(). Get string in window with validation.
**
** The following chages were incorporated in the 06.02.86 release.
**
** 06.02.86 - v_smode was using bh instead of ah. Corrected.
** Thanks to Rob Rainwater!!
**
** 05.26.86 - Added wn_natrib. Set new window attribute NOW!
**
** 05.25.86 - Corrected a potential problem with a couple of the routies
** in MSVLIB.ASM. Registers SI & DI were being used but not
** being saved. This "may" cause spurious probles with "C"
** programs that use register variables. Microsoft C 3.0 only.
**
** - wn_titla was not calling wns_fixc. Corrected.
**
** 05.24.86 - Added wn_titla. write window title with attributes.
**
** 05.10.86 - wn_putsa was not calling wns_fixc. This caused problems
** when CGA was in mode bw80 but putsa was called with a
** valid color atrib.
**
** The following changes were incororated in the 05.08.86 release.
**
** 05.07.86 - Additions for Microsoft "C" version 3.0
**
** 05.05.86 - wn_printf fix for lattice version 3.0.
**
** 04.25.86 - Added support for handling backspace, delete, & BELL
** characters correctly (wns_wtext).
**
** Incorporated v_wtty in vlib.asm.
**
** Initial Release..
**
** 01.24.86 - Initial release with a bit of a false start thanks to
** Microsoft's Lib.
**
*/